#ifndef _ARGUMENTSTYPE_H_
#define _ARGUMENTSTYPE_H_
#include "SimpleNode.h"
#include "ast/exprType.h"
#include "ast/exprType.h"
#include "ast/NameTok.h"
class IVisitor;
class argumentsType;
typedef QSharedPointer<argumentsType> argumentsTypePtr;

class argumentsType: public SimpleNode
{
public:
    explicit argumentsType(const ExprTypeList& args, const NameTokPtr& vararg, const NameTokPtr& kwarg, const ExprTypeList& defaults, const ExprTypeList& kwonlyargs, const ExprTypeList& kw_defaults, const ExprTypeList& annotation, const exprTypePtr& varargannotation, const exprTypePtr& kwargannotation, const ExprTypeList& kwonlyargannotation, int nodeId=-1);
    virtual ~argumentsType();
    
    
    ExprTypeList args();
    void setArgs(const ExprTypeList& args);
    
    NameTokPtr vararg();
    void setVararg(const NameTokPtr& vararg);
    
    NameTokPtr kwarg();
    void setKwarg(const NameTokPtr& kwarg);
    
    ExprTypeList defaults();
    void setDefaults(const ExprTypeList& defaults);
    
    ExprTypeList kwonlyargs();
    void setKwonlyargs(const ExprTypeList& kwonlyargs);
    
    ExprTypeList kw_defaults();
    void setKw_defaults(const ExprTypeList& kw_defaults);
    
    ExprTypeList annotation();
    void setAnnotation(const ExprTypeList& annotation);
    
    exprTypePtr varargannotation();
    void setVarargannotation(const exprTypePtr& varargannotation);
    
    exprTypePtr kwargannotation();
    void setKwargannotation(const exprTypePtr& kwargannotation);
    
    ExprTypeList kwonlyargannotation();
    void setKwonlyargannotation(const ExprTypeList& kwonlyargannotation);
    
    
    virtual QString type() const;
    virtual QString toString() const;
    virtual void accept(IVisitor* visitor, const SimpleNodePtr& node);
    virtual void traverse(IVisitor* visitor);
private:
    ExprTypeList _args;
    NameTokPtr _vararg;
    NameTokPtr _kwarg;
    ExprTypeList _defaults;
    ExprTypeList _kwonlyargs;
    ExprTypeList _kw_defaults;
    ExprTypeList _annotation;
    exprTypePtr _varargannotation;
    exprTypePtr _kwargannotation;
    ExprTypeList _kwonlyargannotation;
};




#endif